package com.zh.work.util.jy;

/**
 * code is far away from bug with the animal protecting
 * ┏┓　　　┏┓
 * ┏┛┻━━━┛┻┓
 * ┃　　　　　　　┃
 * ┃　　　━　　　┃
 * ┃　┳┛　┗┳　┃
 * ┃　　　　　　　┃
 * ┃　　　┻　　　┃
 * ┃　　　　　　　┃
 * ┗━┓　　　┏━┛
 * 　　┃　　　┃神兽保佑
 * 　　┃　　　┃代码无BUG！
 * 　　┃　　　┗━━━┓
 * 　　┃　　　　　　　┣┓
 * 　　┃　　　　　　　┏┛
 * 　　┗┓┓┏━┳┓┏┛
 * 　　　┃┫┫　┃┫┫
 * 　　　┗┻┛　┗┻┛
 *
 * @Description:
 * @Author: Liard
 * @Create in: 2020/7/29 20:25
 * @Version: 1.0.1
 */
public class CardUtil {

    // 信用卡验证本地算法
    public boolean isValidCardNumber(String ccNumber) {
        try {
            ccNumber = ccNumber.replaceAll("\\D", "");
            char[] ccNumberArry = ccNumber.toCharArray();
            int checkSum = 0;
            for (int i = ccNumberArry.length - 1; i >= 0; i--) {
                char ccDigit = ccNumberArry[i];
                if ((ccNumberArry.length - i) % 2 == 0) {
                    int doubleddDigit = Character.getNumericValue(ccDigit) * 2;
                    checkSum += (doubleddDigit % 9 == 0 && doubleddDigit != 0) ? 9 : doubleddDigit % 9;
                } else {
                    checkSum += Character.getNumericValue(ccDigit);
                }
            }
            return (checkSum != 0 && checkSum % 10 == 0);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    // 信用卡验证本地算法
    public static boolean cardValid(String S) {
        int sum1 = 0, sum2 = 0;
        for (int i = S.length() - 1, j = 1; i >= 0; i--, j++) {
            if (j % 2 == 1)
                sum1 = sum1 + (S.charAt(i) - '0');
            else {
                int temp = (S.charAt(i) - '0') * 2;
                if (temp >= 10)
                    temp = temp - 9;
                sum2 = sum2 + temp;
            }
        }
        return (sum1 + sum2) % 10 == 0;
    }

}
